﻿/*
2进转10进(1239强化版) 
Time Limit:100MS  Memory Limit:1024K

  
Description:
天那！真正恐怖的二进制数来了，要将二进制数转换成10进制数。
因为二进制数太长，连转换成的10进制数写写都要好长好长呢！
要求还特别苛，没有把握你能帮得上忙，反正我也晕了很长时间。

Input:
有1000个二进制数，最长的达3000位，以01数字串的形式连续存放，每个数串第一位一定是1。如果是0，那就表示输入结束。 
Output:
每一个二进制数对应一个十进制数输出。每个输出要换行。 
Sample Input:
1010010000111110111110110110011001011111110011111100000001
1111111110101010010101010010100000001111100
100001
0
Sample Output:
184924582623264513
8784594944124
33
*/

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
	for (string bin; cin>>bin;)
	{
		if('0'==bin[0])
			break;
		if("1"==bin)
		{
			cout<<"1"<<endl;
			continue;
		}
		int len=bin.length();
		vector<int> decimal(len/2);
		int k=0, size=1;
		for (; k<len; ++k)
		{
			int i=0, carry=0;
			/*
				carry=bin[k]-'0';
				decimal[i]=decimal[i]*16+carry;
			*/
			/*
			转成十六进制
			decimal[0]=decimal[0]*16+bin[k]-'0';
			*/
			for (; i<size; ++i)
			{
				int sum=decimal[i]+decimal[i]+carry;
				decimal[i]=sum%10;
				carry=sum/10;
				
			}
			decimal[size]+=carry;
			if(carry)
				size++;
			carry=bin[k]-'0';
			for (i=0;i<size;)
			{
				int sum=decimal[i]+carry;
				decimal[i]=sum%10;
				carry=sum/10;
				i++;
				if(carry && i==size)
					size++;					
			}
		}
		k = size;
		for (; 0 == decimal[k] && k >= 0; k--)
			;
		for (; k >= 0; k--)
			cout << decimal[k];
		cout << endl;
	}
	return 0;
}